home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-12-02 | 48.7 KB | 1,519 lines |
-
-
-
- Frankenstein Cross Assemblers Users Manual
-
- Mark Zenier
-
-
-
-
- 1. Disclaimer
-
- This software is in the public domain. Any prior
- copyright claims are relinquished.
-
- This software is distributed with no warranty whatever.
- The author takes no responsibility for the consequences of
- its use.
-
-
- 2. Introduction
-
- 2.1 This_Manual
-
- This manual covers the basic features for the Frankenstein
- cross assemblers. The specific features for a given
- target architecture will be covered in the appendix for
- that cross-assembler.
-
- 2.2 Notation
-
- Items enclosed in [] are optional. The "[]" are not
- entered in the source statement or command line, and are
- just a notation.
-
-
- 3. Invocation
-
- name [-o binary] [-l listing] [-s symbols] [-d] input
-
- The optional operands on the command line can be in any
- order.
-
- 3.1 Input_File
-
- The input file must appear after the optional entries on
- the command line. Only one input file is used with this
- version. If the file name is a single minus sign, the
- standard input is used.
-
- 3.2 Listing_File
-
- -l filename
-
- An annotated listing will only be produced if an optional
- list file is provided, otherwise the error messages and
- summary will be output to the console. There is no
- required suffix or default extension for the file name.
-
-
-
-
-
-
-
-
-
-
-
- - 2 -
-
-
-
- 3.3 Hex_Output_File
-
- -h filename or
- -o filename
-
- The binary output will only be produced if the optional
- file is provided. See the section in the description of
- the output files for the format of the data records. If
- any errors occur, the hex output file is either not
- created or is deleted depending on whether the error
- occurred in the input or output phases of processing.
- There is no required suffix or default extension for the
- file name.
-
- 3.4 Symbol_Listing_File
-
- -s filename
-
- The symbol table is dumped with one entry per line for
- whatever use is desired, normally with the sort utility to
- produce symbol listings in a different order that the one
- provided. See the section on the output files for a
- description of the format. There is no required suffix or
- default extension for the file name.
-
- 3.5 Debug
-
- The -d debug option
-
- - Saves the intermediate file in the /usr/tmp directory
-
- - Calls the abort() system call to produce a "core"
- file
-
- 3.6 Processor_Selection
-
- assembler name or
- -p string
-
- Some of these assemblers support related families of
- processors, and can be limited to specific subsets of the
- total instructions by sending the processor number or name
- as an operand. The operand is scanned for unique
- substrings which identify the target processor. The
- operand can be either the name of the executable, or the
- operand of the -p option, with the operand of the -p
- having precedence. The name of the executable may not
- available in some operating systems. The CPU pseudo-
- operation has precedence over both the name scan and the
- -p operand [see the appendix for the specific processor].
-
-
-
-
-
-
-
-
-
-
-
-
- - 3 -
-
-
-
- Example
-
- a6800 for the mc6800 instruction set
- a6801 for the 6801/6803 instruction set
- a6811 for the mc68hc11 instruction set
-
-
- 4. Source_Input_File
-
- The source input is a text file a with one statement per
- line. Adjacent symbols must be separated by spaces or
- tabs or special characters such as operators or
- parenthesis.
-
- 4.1 Input_Lines
-
- Source lines consist of up to four parts
-
- [Label] [Opcode [Operands] ] [; comments]
-
- Labels A symbol that starts in the first column of the
- line is a label. A label is used as the defining
- instance of a symbol, the place where it is
- given a value, normally the address of the
- location in memory where the data generated by
- the rest of the statement is placed. Labels are
- optional for target machine instructions
- statements. Label are required on some pseudo-
- operations, and are not allowed on others.
-
- Opcode The first symbol in a line that doesn't start in
- column 1 is treated as an opcode, all symbols
- after that are treated as symbol references.
- Opcodes are treated as a separate set of
- symbols, so a label can have the same character
- string as an opcode. Opcodes are converted to
- uppercase for comparison, so case is not
- significant.
-
- Operands The rest of the line is the operands associated
- with the opcode. These are expressions, symbol
- references, or other syntactic elements
- determined by the specific operation.
-
- Comments Comments start with a ';', anything on a line
- after a semicolon is ignored. Lines that
- consist of only a comment are treated as empty
- lines.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 4 -
-
-
-
- Example
-
- ; just a little example
- org $700
- label equ * ; set label to current location
- adda #$21 ; a 6800 example
- end
-
- 4.1.1 Limitations Input lines should be shorter than 256
- characters. An error message is issued if lines are
- longer.
-
- 4.1.2 Empty Empty lines are ignored as input, but are
- copied to the listing file.
-
- 4.2 Syntactic_Elements
-
- 4.2.1 Symbols Symbols are strings of characters. The
- first of which is one of the following.
-
- A-Z a-z ! & ^ _ ~
-
- The rest of the string consists of zero or more of the
- following.
-
- 0-9 A-Z a-z ! & ^ _ ~
-
- There is no length limit to symbols, all characters are
- significant. Case is significant.
-
- 4.2.2 Reserved_Variables_Names Machine specific names,
- and operator names that can appear in symbolic expressions
- share the same symbol table with labels, and cannot be
- used as labels. The list will vary from machine to
- machine. Case is significant for these symbols.
-
- Examples
-
- and defined eq ge gt high le low lt mod ne not or shl
- shr xor AND DEFINED EQ GE GT HIGH LE LOW LT MOD NE
- NOT OR SHL SHR XOR
-
- 4.2.3 Numeric_Constants numeric constants can be
- specified in decimal, hexadecimal, octal, and binary.
- Constants are maintained as long variables, but the
- instruction generation will cause an error if the value is
- too big to fit in its destination field.
-
- 4.2.3.1 Decimal_Constants
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 5 -
-
-
-
- - one or more decimal characters (0-9) followed by an
- optional "d" or "D" base designator.
-
- 4.2.3.2 Hexadecimal_Constants
-
- Either
-
- - one or more hexadecimal characters (0-9 a-f A-F)
- preceded by a "$" base designator.
-
- - a decimal character (0-9) followed by zero or more
- hexadecimal characters (0-9 a-f A-F) followed by a
- "h" or "H" base designator
-
- 4.2.3.3 Octal_Constants
-
- Either
-
- - one or more octal characters (0-7) preceded by a "@"
- base designator
-
- - one or more octal characters (0-7) followed by a "o"
- or "O" or "q" or "Q" base designator. Note: this is
- the letter "O" not the number "0".
-
- 4.2.3.4 Binary_Constants
-
- Either
-
- - one or more binary characters (0 or 1) preceded by a
- "%" base designator.
-
- - one or more binary characters (0 or 1) followed by a
- "b" or "B" base designator.
-
- 4.2.3.5 Examples
-
- 123 decimal number
- 123d decimal number
- $faf hexadecimal number
- 0fafh hexadecimal number, note leading zero used
- to differentiate this from symbol "fafh"
- @1234 octal number
- 1234Q octal number
- %010101 binary number
- 010101b binary number
-
- 4.2.4 String_Constants String constants are specified
- using either the quotation mark " or the apostrophe '. A
- string starting with one of these character is terminated
- by only that character and can contain the other string
-
-
-
-
-
-
-
-
-
-
-
- - 6 -
-
-
-
- delimiter as data. A string with no characters is valid.
-
- The values generated in the binary output can be different
- from the host computers character set (the default). See
- the section on Defining Target Character Sets.
-
- Within the character string, the backslash is an escape
- character.
-
- \c Character escapes
- The only characters defined for the
- default (no) translation are \\ \" \'.
- Any other translation, (the control
- characters '\n', '\r', etc.) require a
- translation table be defined. Values
- can be set up for any character
- following the backslash escape except
- x and 0 through 7.
-
- \777 Octal character escapes
- An one, two or three character octal
- constant. The one byte value is the
- binary representation of the number.
- The value is masked off for a maximum
- value of 255.
-
- \xFF Hexadecimal character escapes
- A one or two character hexadecimal
- constant, preceded by a lower case x.
- Upper and lower case characters A
- through F are valid. The one byte
- value is the binary representation of
- the number.
-
- Examples
-
- "this isn't illegal"
- 'this is the other delimiter'
- '"'
- "\xfe\0\n"
-
- 4.3 Expressions
-
- Expressions consist of
-
- - Symbolic References
- - Location Counter References
- - Numeric Constants
- - String Constants
- - Operators
-
-
-
-
-
-
-
-
-
-
-
-
- - 7 -
-
-
-
- Expressions are used as operands in statements where any
- numeric value or memory address is desired.
-
- 4.3.1 Symbols A symbol reference is the name of an item
- in the symbol table, which has a numeric value associated
- with it. This value is either the memory address of the
- statement which has this symbol as a label, or the value
- of the expression defined in a SET or EQU statement which
- has this symbol as a label.
-
- 4.3.1.1 Forward_References During the input phase of
- processing, a symbol value may not be known if the
- definition of the symbol has not yet occurred. Some
- pseudo-operations require that their operand expressions
- have a value at the input phase, so no references to as
- yet undefined symbols can occur in this case. In the
- output phase of processing, it will result in an error if
- any of the symbols used in expressions do not have values
- defined.
-
- 4.3.1.2 Reserved_Symbols_for_Operators Using reserved
- symbols as labels will result in a syntax error as they
- are predefined as a different type of syntactic element
- than the rest of the symbol table. Operators for which
- there is no special character representation, and items
- like machine register names and condition code types will
- be represented by reserved symbols. The set of the
- reserved symbols will vary for each target machine, and
- will be documented in the appendix for each target.
-
- 4.3.2 Location_Counter The special name '*' used in an
- expression represents the location of the first byte of
- the binary output for the current statement. Some
- assemblers use some other character for source code
- compatiblity.
-
- 4.3.3 Constants The form of numeric constants is defined
- in the previous section.
-
- 4.3.4 Strings String constants, as defined in the
- previous section, are valid in expressions. However, at
- most the first two characters are used. If the string is
- the null string, i.e. "", the numeric value is zero. If
- the string is one character long, the value is the value
- of the current character set translation, or the host
- computers character set if no translation is active. If
- the string is two or more characters long, the value is
- 256*(the first character) + (the second character).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 8 -
-
-
-
- 4.3.5 Operators
-
- 4.3.5.1 Description
-
- '+' expression
- Unary plus. No real effect.
-
- '-' expression
- Unary minus, the result is the
- negative of the expression.
-
- NOT expression
- Logical negation. The result is 0 if
- the expression is nonzero, 1 if the
- expression is 0.
-
- HIGH expression
- Result is the High half of a two byte
- number, equivalent to (expression SHR
- 8) AND $FF.
-
- LOW expression
- Result is the Low order byte of the
- expression, equivalent to (expression
- AND $FF)
-
- expression '*' expression
- expression '/' expression
- expression '+' expression
- expression '-' expression
- Standard arithmetic operations.
-
- expression MOD expression
- Result is the remainder of the
- division of the value of the left
- expression by the right.
-
- expression SHL expression
- expression SHR expression
- Shift the value of the left expression
- left or right by the number of bit
- positions given by the right
- operation.
-
- expression GT expression
- expression GE expression
- expression LT expression
- expression LE expression
- expression NE expression
- expression EQ expression
- expression '>' expression
-
-
-
-
-
-
-
-
-
-
-
- - 9 -
-
-
-
- expression '>=' expression
- expression '<' expression
- expression '<=' expression
- expression '=' expression
- expression '<>' expression
- Relational expressions. If the
- relation is true, the value is 1. If
- false, the value is 0. The operators
- are nonassociative, the expression "
- 1 < 3 < 5 " is not legal.
-
- expression AND expression
- expression OR expression
- expression XOR expression
- Bitwise logical operations.
-
- DEFINED symbol
- If the symbol (not an expression) is
- defined, i.e. used as a label, before
- this point in the input the value is
- 1. If not, the value is 0.
-
- '(' expression ')'
- Parenthesis are available to override
- the operator precedence.
-
- 4.3.5.2 Precedence The precedence of the operators from
- lowest to highest.
-
- 1. HIGH LOW
- 2. OR XOR
- 3. AND
- 4. NOT
- 5. GT GE LE LT NE EQ '>' '>=' '<' '<=' '=' '<>'
- 6. '+' '-'
- 7. '*' '/' MOD SHL SHR
- 8. unary '+' '-'
- 9. ( expression )
-
-
- 5. Statements
-
- The names for the operations and pseudo-operations for
- each assembler are specified in the adaptation files, and
- can be different from the examples given here.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 10 -
-
-
-
- 5.1 Label_Only_Line
-
- A line with only a label starting in column 1 will define
- that symbol with the current value of the location
- counter.
-
- 5.2 End
-
- [Label] END
-
- The End statement terminates the processing of the current
- file. For an include file, the file is closed and input
- resumes in the file that contained the include statement.
- For the main file, processing shifts to the following
- passes of the assembly. The end statement is optional, as
- the end of file condition is treated in the same fashion.
- If the optional label is present, The symbol specified is
- used as the execution start address that is output in the
- binary file. The symbol must be used as a label somewhere
- else in the file. When more than one start address is
- specified, the last one in the file is used.
-
- 5.3 File_Inclusion
-
- INCLUDE "filename"
- INCL "filename"
-
- The include statement shifts input from the current file
- to the file specified. Input resumes from the file
- containing the include statement when the end of file or
- the End statement is reached in the included file.
- Includes can be nested up to the limits of the include
- file stack, currently a limit of 20 deep, or the limits of
- the operating system, whichever comes first. Includes can
- be recursive, i.e., a file can include itself. If a file
- cannot be opened, either do to an bad filename or a lack
- of system resources, an error is issued.
-
- 5.4 Conditional_Assembly
-
- 5.4.1 If
-
- IF expression
-
- The IF statement allows selective assembly. If the
- expression evaluates to a nonzero value, all statements
- between the IF and the matching ELSE or ENDI are
- assembled. If the expression evaluates to zero, or the
- expression in noncomputable due to a forward reference,
- all statements between the IF and the matching ELSE or
- ENDI are ignored.
-
-
-
-
-
-
-
-
-
-
-
- - 11 -
-
-
-
- Note: it is safer to use the DEFINED operator when testing
- for the existence of a symbol than to rely on the
- noncomputability of an expression.
-
- IF statements can be nested to a depth determined by a
- configuration constant, currently 32. No label is allowed
- on an IF statement.
-
- 5.4.2 Else
-
- ELSE
-
- The ELSE statement causes all statements between it and
- its corresponding ENDI statement to be treated the
- opposite of the statements between the matching IF and
- this statement. When the expression on the matching IF is
- nonzero, the statements between the ELSE and ENDI are
- ignored. If the IF expression failed, the statements
- between the ELSE and the ENDI are assembled. Labels are
- not allowed on ELSE statements.
-
- 5.4.3 End_If
-
- ENDI
-
- The ENDI statement terminates processing of its matching
- IF statement. Labels are not allowed on ENDI statements.
-
- 5.5 Symbolic_Constants
-
- Symbols can be assigned numeric values with the SET and
- EQU statements. The expressions cannot have forward
- references to as yet undefined symbols.
-
- 5.5.1 Equate
-
- Label EQU expression
-
- The EQU statement takes the value of the expression and
- creates a symbol with that value. Symbols defined in EQU
- statements cannot already exist, or be redefined.
-
- 5.5.2 Set
-
- Label SET expr
-
- The SET statement sets the symbol specified in the label
- field with the numeric value of the expression. The SET
- statement can change the value of a symbol, but only if
- the symbol is originally defined in a previous SET
- statement.
-
-
-
-
-
-
-
-
-
-
-
- - 12 -
-
-
-
- Example
-
- counter set 1
- counter set counter+1
- counter set counter+1
-
- 5.6 Location_Counter_Value_Setting
-
- The address of the generated binary data can be changed
- with the ORG and reserve statements.
-
- 5.6.1 Org
-
- [Label] ORG expression
-
- The location counter is set to the numeric value of
- expression. It is an error if the expression contains
- references to symbols not yet defined. The optional label
- is set to the new value of the location counter.
-
- 5.6.2 Reserve_Memory
-
- [Label] RMB expression
- [Label] RESERVE expression
-
- The reserve memory statement moves the location counter
- forward by the number of bytes specified in the
- expression. The label is set to the first location of
- this area.
-
- 5.7 Data_Definitions
-
- 5.7.1 Define_Byte_Data
-
- [Label] BYTE expression [, expression] ...
- [Label] FCB expression [, expression] ...
- [Label] DB expression [, expression] ...
-
- The define byte statement generates one character of data
- for each expression in the expression list. There can be
- up to 128 expressions on a line, more than the line length
- will allow. The optional label is set to the first
- location of this area.
-
- 5.7.2 Define_Word_Data
-
- [Label] WORD expression [, expression] ...
- [Label] FDB expression [, expression] ...
- [Label] DW expression [, expression] ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 13 -
-
-
-
- The define word statement generates a two byte integer for
- each expression in the expression list. There can be up
- to 128 expressions on a line, more than the line length
- will allow. The byte order of the data is determined by
- the adaptation files for the target processor. The
- optional label is set to the first location of this area.
-
- 5.7.3 Define_String_Data
-
- [Label] STRING string [, string] ...
- [Label] FCC string [, string] ...
-
- The define string statement generates data encoded in the
- current character set translation, one byte per character,
- excluding the delimiter characters. The optional label is
- set to the first location of this area.
-
- 5.8 Defining_Target_Character_Sets
-
- The values generated for String Constants in both the
- Define String Data and in expressions can be specified on
- a character by character basis. This is to support cross
- assembly where the target system has a different character
- set from the host computer.
-
- 5.8.1 Define_Character_Set_Translation
-
- Label CHARSET
-
- The define character set translation statement defines a
- name and creates an internal table for a character set.
- The label symbol is treated like the label on an EQU
- statement. The value is from an internal counter and has
- little or no meaning outside of using it on a CHARUSE
- statement to specify which translation to use. There can
- be up to 5 [configurable] character translation sets. A
- CHARSET statement must precede any CHARDEF statements.
-
- 5.8.2 Define_Character_Value
-
- CHARDEF string, expression [, expression ] ...
- CHD string, expression [, expression ] ...
-
- The define character value statement set the translation
- for one or more characters in the table defined by the
- preceding CHARSET statement. There can be more than one
- character in the string, but the number of expression in
- the value list must match the number of characters. Octal
- and Hexadecimal escape sequences cannot occur in the
- string.
-
-
-
-
-
-
-
-
-
-
-
-
- - 14 -
-
-
-
- There are two sets in each translation table. The first is
- for the characters, the second for characters escaped with
- the backslash.
-
- Note: the characters '"' and '\"' (and "'" and "\'") each
- have an entry in different halves of the translation
- tables.
-
- 5.8.3 Use_Character_Translation
-
- CHARUSE
- CHARUSE expression
-
- The use character translation statement changes the
- translation for the following statements. The statement
- without an expression turns off the translation, so the
- host character set is used. The statement with an
- expression (the name given on the CHARSET statement) sets
- the translation to the set defined in the respective
- CHARSET.
-
- Example
-
- ascii charset
- chardef " !\"#$%&\'",$20,$21,$22,$23,$24,$25,$26,$27
- chardef "()*+,-./",$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
- chardef "01234567",$30,$31,$32,$33,$34,$35,$36,$37
- chardef "89:;<=>?",$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
- chardef "@ABCDEFG",$40,$41,$42,$43,$44,$45,$46,$47
- chardef "HIJKLMNO",$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
- chardef "PQRSTUVW",$50,$51,$52,$53,$54,$55,$56,$57
- chardef "XYZ[\\]^_",$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
- chardef "`abcdefg",$60,$61,$62,$63,$64,$65,$66,$67
- chardef "hijklmno",$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
- chardef "pqrstuvw",$70,$71,$72,$73,$74,$75,$76,$77
- chardef "xyz{|}~",$78,$79,$7a,$7b,$7c,$7d,$7e
- chardef '"', $22 ; not the same table entry as '\"'
- chardef "'", $27 ;
- chardef "\n\t\v\b\r\f\a", $0a,$09,$0b,$08,$0d,$0c,$07
- charuse ascii
-
- 5.9 Machine_Instructions
-
- [Label] opcode operands?
-
- Machine instructions generate the binary output by
- evaluating the expressions for the operands, and matching
- the opcode with the entry in the instruction generation
- tables.
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 15 -
-
-
-
- If the instruction has more than one format which is
- selected by the value of the operands, the selection
- criteria must able to be determined at the input phase of
- processing. For example, in the mc6800 architecture
- direct address mode, any memory variables that are have an
- address between 0 and 255 must be defined before any
- reference to these symbols.
-
- The optional label is set to the first location of the
- generated instruction.
-
-
- 6. Output
-
- 6.1 Program_Generated_Messages_and_Errors
-
- 6.1.1 Messages
-
- `` ERROR SUMMARY - ERRORS DETECTED {count}''
- `` - WARNINGS {count}''
- output at the end of the listing and on the
- console.
-
- 6.1.2 System_Errors
-
- ``cannot open hex output {filename}''
- file cannot be opened for output. The assembly
- continues as if the -[oh] option was not
- specified.
-
- ``cannot open input file {filename}''
- file cannot be opened for reading. Fatal error.
-
- ``cannot open list file {filename}''
- file cannot be opened for output. The assembly
- continues as if the -l option was not specified.
-
- ``cannot open symbol file {filename}''
- file cannot be opened for output. The assembly
- continues as if the -s option was not specified.
-
- ``cannot open temp file {filename}''
- file cannot be opened for input or output. Fatal
- error.
-
- ``no input file''
- no input operand specified. Fatal error.
-
- ``no match on CPU type {string}, default used''
- operand for a -p option can't be matched.
-
-
-
-
-
-
-
-
-
-
-
-
- - 16 -
-
-
-
- ``cannot allocate string storage''
- Request to operating system for more memory
- failed. Fatal error. The string storage pool
- is where the character representation of symbols
- and names for include files are stored.
-
- ``cannot allocate symbol space''
- Request to operating system for more memory
- failed. Fatal error. The symbol table is full.
- The symbol space is the set of arrays where the
- symbol values and other numeric information is
- stored.
-
- ``cannot redefine reserved symbol''
- Error in defining reserved symbols. Two calls to
- "reservedsym()" with the same character string
- value exist in the setup. Fatal error. Should
- not occur in a production executable.
-
- ``excessive number of subexpressions''
- The first pass ran out of element storage for
- the expression parse tree. The expression is
- too complex. Internal error which should never
- occur. Fatal error.
-
- ``unable to allocate symbol index''
- Request to operating system for more memory
- failed. Fatal error. The symbol table is full.
- The symbol index is used in the output pass to
- direct symbol references to the symbol table
- entry.
-
- 6.1.3 Error
-
- ``ELSE with no matching if''
- ``ENDI with no matching if''
- mismatched if/else/endi results in an else/endi
- left over
-
- ``IF stack overflow''
- more than IFSTKDEPTH (32) nested if statements
-
- ``Overlength/Unterminated Line''
- line longer than input buffer, or not terminated
- with newline character.
-
- ``active IF at end of file''
- mismatched if/else/endi results in an unclosed
- if
-
- ``cannot change symbol value with EQU''
-
-
-
-
-
-
-
-
-
-
-
- - 17 -
-
-
-
- symbol is already defined.
-
- ``cannot change symbol value with SET''
- symbol is already defined, but not with a Set
- statement.
-
- ``cannot create character translation table''
- the internal table for a character translation
- set cannot be allocated due to lack of space, or
- more translation sets than the assembler is
- configured for.
-
- ``cannot open include file''
- The include file cannot be opened for reading,
- or not enough system resources are available to
- open the file.
-
- ``character already defined 'char' ''
- the character is already present in a previous
- CHARDEF statement for this translation set.
-
- ``expression exceeds available field width''
- The value of an expression is too large to fit
- into the field of the instruction. Relative
- branch target is too far away.
-
- ``expression fails validity test''
- An explicit test programmed in the generation
- string for the instruction failed. These
- conditions are documented in the appendix for
- the specific instruction set.
-
- ``expression stack overflow''
- Too many level of parenthesis or complex
- expression with operator precedence that results
- in the expression evaluation stack overflowing.
-
- ``include file nesting limit exceeded''
- include files are nested to more than
- FILESTKDPTH (20) levels deep. "cannot open
- include file" usually occurs first.
-
- ``invalid char in instruction generation''
- Internal error, instruction generation string is
- not defined properly. Should not occur in a
- production executable.
-
- ``invalid character constant 'char' ''
- A character specification in a string constant
- isn't properly formed.
-
-
-
-
-
-
-
-
-
-
-
-
- - 18 -
-
-
-
- ``invalid character to define 'char' ''
- a constant in the string in a CHARDEF statement
- is of a form (octal, hex, or improperly formed)
- that does not have a translation table entry.
-
- ``invalid opcode''
- No such string occurs in the opcode symbol
- table. Opcode strings are converted to
- uppercase before comparison, and therefore are
- case insensitive.
-
- ``invalid operands''
- ``invalid operands/illegal instruction for cpu''
- statement has a valid opcode, with the correct
- syntax, but no code generation can be found in
- the table for these operands
-
- ``invalid syntax for instruction''
- opcode is valid, but not for this syntax form
-
- ``more characters than expressions''
- ``more expressions than characters''
- A mismatch between the string constant and the
- number of expressions in a CHARDEF statement.
-
- ``multiple definition of label''
- label symbol is already defined.
-
- ``no CHARSET statement active''
- a CHARDEF statement occurs before any CHARSET
- statement.
-
- ``noncomputable expression for EQU''
- ``noncomputable expression for ORG''
- ``noncomputable expression for SET''
- ``noncomputable result for RMB expression''
- expression contains reference to symbols that
- have not yet been defined, and thus has no
- numeric value.
-
- ``nonexistent character translation table''
- expression in a CHARUSE statement does not
- correspond to any CHARSET statements label.
-
- ``overflow in instruction generation''
- ``overflow in polish expression conversion''
- The intermediate file line being built exceeds
- the length of the buffer. The expression is too
- complex.
-
- ``syntax error at/before character ^{character}''
-
-
-
-
-
-
-
-
-
-
-
- - 19 -
-
-
-
- ``syntax error at/before character {character}''
- ``syntax error at/before token {symbol/constant}''
- ``syntax error at invalid token {constant/string} ''
- ``syntax error at/before string {string} ''
- ``syntax error at/before End of Line''
- ``syntax error at/before {relational op}''
- ``syntax error at/before Undeterminable Symbol''
- ``syntax error - undetermined yyerror type''
- statement is in a form that the first pass
- parser cannot recognize. The next syntactic
- element is inappropriate for whatever language
- element the parser is working on.
-
- ``error or premature end of intermediate file''
- ``syntax error - cannot backup''
- ``unimplemented width''
- ``unknown intermediate file command''
- ``yacc stack overflow''
- Internal errors, should not occur.
-
- ``undefined character value 'char' ''
- A string constant contains a character not
- defined in a CHARDEF statement for the current
- character translation.
-
- ``undefined symbol {symbolname}''
- symbol has no definition anywhere in file.
-
- 6.1.4 Warnings
-
- ``character translation value truncated''
- An expression in a CHARDEF statment has a value
- less than zero or greater then 255.
-
- ``forward reference to SET/EQU symbol''
- A symbol in an expression is defined in a
- set/equ statement that occurs after the line.
- For set statements, the value of the symbol is
- that defined in the set statement closest to the
- end of the file.
-
- ``string constant in expression more than 2
- characters long''
- The first two characters are used as the numeric
- value of the subexpression.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 20 -
-
-
-
- 6.2 Listing
-
- When the -l option is used, the detailed listing is output
- to the given file. This consists of the symbol listing
- followed by the annotated listing.
-
- 6.2.1 Symbol_Table The symbol listing is printed three
- symbols across, with the value then name of the symbol.
- Undefined symbols will have "????????" in their value
- field. The symbols are listed in order of first
- occurrence in the input. Only the first fifteen
- characters of a symbol are printed.
-
- 6.2.2 Instruction_Lines The source statements are
- printed in the same form as they were input with no
- reformatting. Following the source line, will be any
- error or warning messages associated with the line.
- Statements which generate data will be preceded with the
- address and data for them in hexadecimal format. If more
- than six bytes of data are generated, the remainder will
- be printed on the following lines, with up to sixteen
- bytes per line. All data generated is printed in the
- file. Statements that don't generate data but have some
- value oriented operation, like EQU, SET, ORG, or RESERVE,
- will print that value in the first 24 columns of the
- source line.
-
- 6.3 Symbol_File
-
- When the -s option is used, the symbol table is printed to
- the given file. The format is one symbol per line,
- address then symbol name. If the symbol is undefined,
- "????????" is printed for the address. The symbols are
- printed in the order of first occurrence, either
- definition or reference, in the source file. This feature
- is provided so the system sort utility can be used to
- produce symbol tables sorted by either address or name.
- The entire symbol name is printed.
-
- 6.4 Binary_Output
-
- 6.4.1 Intel_Hex_Record_Format The Intel hex record is a
- printable text string with an ASCII character representing
- 4 bits of a byte. The characters used are "0" through "9"
- and "a" through "f", representing binary data 0000 to
- 01001, and 1010 through 1111. There are always two ASCII
- characters used to represent 1 byte, the high half, then
- the low half. There is one record per line in a text
- file. This format is accepted by most of prom programmers.
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 21 -
-
-
-
- Record Layout
-
- :ccaaaattddddddddddkk
-
- ':' indicator character
-
- cc ascii-hex representation of an 8 bit count
- of data characters
-
- aaaa ascii-hex representation of 16 bit address
-
- tt ascii-hex representation of an 8 bit type
-
- 00 the address is the first location
- to store the data
-
- 01 the address is the location to
- start execution, the count is 00,
- no data is present.
-
- dd... ascii-hex representation of the data, two
- characters per byte. The number of 8 bit
- bytes is given by the count field.
-
- kk ascii-hex representation of an 8 bit
- checksum. The sum of the binary
- representation, modulo 256, of the count,
- the high half of the address, the low half
- of the address, the type, all the data
- bytes, and the checksum must be zero.
-
-
- 7. Program_Limits
-
- Line Length 256 characters including end
- of line control characters
-
- Number of Symbols
-
- - The maximum allocatable
- block size divided by the
- size of a pointer. For a
- iAPX286, about 16000
- entries.
-
- - The amount of allocatable
- memory divided by the
- amount of space per
- symbol. For an iAPX286,
- 22 + 1 + the length of the
- string bytes.
-
-
-
-
-
-
-
-
-
-
-
- - 22 -
-
-
-
- Symbol Length See line length
-
- Output A 16 bit address in the
- output record format limits
- output to 65536 binary
- bytes.
-
- Expressions per Line 128 (in BYTE and WORD
- statements)
-
- Strings per Line 128 (in STRING statements)
-
- Nested If Statements 32 levels
-
- Nested Include Files 20 or whatever the operating
- system allows
-
- Subexpressions per Line 258 symbols, constants,
- operators (total)
-
- Character Translation Sets 5 sets, plus the default
- (host) character set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CONTENTS
-
-
- 1. Disclaimer........................................ 1
-
- 2. Introduction...................................... 1
- 2.1 This Manual.................................. 1
- 2.2 Notation..................................... 1
-
- 3. Invocation........................................ 1
- 3.1 Input File................................... 1
- 3.2 Listing File................................. 1
- 3.3 Hex Output File.............................. 2
- 3.4 Symbol Listing File.......................... 2
- 3.5 Debug........................................ 2
- 3.6 Processor Selection.......................... 2
-
- 4. Source Input File................................. 3
- 4.1 Input Lines.................................. 3
- 4.2 Syntactic Elements........................... 4
- 4.3 Expressions.................................. 6
-
- 5. Statements........................................ 9
- 5.1 Label Only Line.............................. 10
- 5.2 End.......................................... 10
- 5.3 File Inclusion............................... 10
- 5.4 Conditional Assembly......................... 10
- 5.5 Symbolic Constants........................... 11
- 5.6 Location Counter Value Setting............... 12
- 5.7 Data Definitions............................. 12
- 5.8 Defining Target Character Sets............... 13
- 5.9 Machine Instructions......................... 14
-
- 6. Output............................................ 15
- 6.1 Program Generated Messages and Errors........ 15
- 6.2 Listing...................................... 20
- 6.3 Symbol File.................................. 20
- 6.4 Binary Output................................ 20
-
- 7. Program Limits.................................... 21
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - i -
-
-
-
-
-